package fag.core.game.test.playground.solid;

import java.awt.Dimension;
import java.awt.Graphics2D;
import java.awt.geom.AffineTransform;

import fag.core.geometry.Rectangle2D;

/**
 * Classe des solides de formes rectangulaires.
 * @author lumz
 */
public class Rectangle extends AbstractSolid {
	
	private final Dimension size;
	
	/**
	 * Constructeur paramétré.
	 * @param width La largeur du rectangle.
	 * @param height La hauteur du rectangle.
	 */
	public Rectangle(int width, int height) {
		super(new Rectangle2D(-width / 2, -height / 2, width, height));
		
		size = new Dimension(width, height);
		
		initialize();
	}

	@Override
	protected void draw(Graphics2D graphics2d) {
		
		// Transformation du plan pour peindre l'objet à sa position
		AffineTransform old = graphics2d.getTransform();
		
		synchronized(transformation) {
			graphics2d.transform(transformation);
		}
		
		graphics2d.setColor(color);
		graphics2d.fillRect((int)-size.getWidth() / 2, (int)-size.getHeight() / 2, (int)size.getWidth(), (int)size.getHeight());
		graphics2d.setColor(OUTLINE_COLOR);
		graphics2d.drawRect((int)-size.getWidth() / 2, (int)-size.getHeight() / 2, (int)size.getWidth(), (int)size.getHeight());
		
		// Restauration du contexte graphique
		graphics2d.setTransform(old);
	}
	
	/**
	 * Initialise le solide.
	 */
	private void initialize() {
		setMomentOfInertia((Math.pow(size.getWidth() / 2, 2) + Math.pow(size.getHeight() / 2, 2)) * getMass());
	}
}
